home *** CD-ROM | disk | FTP | other *** search
- /* Este script se encarga de cargar/grabar en ficheros .TAP */
-
- /* Para convertir ficheros sueltos a .TAP lo mejor es usar un copión */
- /* como el DUPLITAPE, con 'Load Mode -> Disk' y 'Save Mode -> ARexx' */
-
- /* comprobamos si el emulador está presente */
- address command
-
- if ~show(ports,ZXAM_REXX) then do
- requestchoice 'title "ZXAM Script error..." body "No encuentro el puerto del emulador!!" gadgets "AARGH!"'
- exit
- end
-
- ZXAMTapeSetResult(2) /* resultado=error */
-
- /* Comprobar el tipo de operación deseada */
-
- oper=ZXAMTapeAction()
- if oper=0 then exit /* Script ejecutado manualmente */
- if oper=3 then signal actionsave /* SAVE */
-
- /* La operación es LOAD o VERIFY */
- actionload:
- nombre=ZXAMTapeLoadName() /* Nombre del .TAP actualmente seleccionado */
-
- ZXAMTapeSetLoadName('')
-
- /* Requester de LOAD si no hay .TAP seleccionado */
- if nombre='' then do
- oldpath=zxamactloadpath()
- oldpattern=zxamactpattern()
- zxamloadpath("ram:")
- zxampattern('#?.TAP')
- ZXAMControlToFront()
- nombre=zxamloadrequester("Selecciona el fichero .TAP...")
- ZXAMTapeSetLoadOffset(0)
- ZXAMEmulToFront()
- zxamloadpath(oldpath)
- zxampattern(oldpattern)
- end
-
- if nombre='' then exit 0 /* pulsado el CANCEL */
-
- /* abrimos el fichero */
- if ~open('fichero',nombre,'R') then exit 0
-
- /* Nos colocamos en el punto adecuado del fichero */
- filepos=ZXAMTapeLoadOffset()
-
- /* Si hay problemas, seleccionar otro .TAP */
- if filepos~=seek('fichero',filepos,'B') then do
- dummy=close('fichero')
- signal actionload
- end
-
- /* leer el tamaño del bloque actual */
- size=readch('fichero',2)
- if length(size)~=2 then do
- dummy=close('fichero')
- signal actionload
- end
-
- /* abrir fichero temporal para entregar resultado */
- if ~open('destino','t:zxamtemp','W') then exit 0
-
- /* convertirlo a numero */
- size=c2d(reverse(size)) /* fomato invertido Z80 */
-
- /* cargar el bloque */
- block=readch('fichero',size)
-
- /* salvarlo hacia el fichero temporal */
- dummy=writech('destino',block)
-
- ZXAMTapeSetLoadName(nombre)
- ZXAMTapeSetLoadOffset(seek('fichero',0,'C'))
-
- ZXAMTapeSetResult(1,'t:zxamtemp')
-
- dummy=close('fichero')
- dummy=close('destino')
-
- exit
-
-
- /* La operación es SAVE */
- actionsave:
- nombre=ZXAMTapeSaveName()
-
- ZXAMTapeSetSaveName("")
-
- if ((zxamtapeflag()=0)&&(zxampeek(zxamtapeaddress())=0)&&(zxamtapesize()=17)) then nombre=''
-
- /* requester de SAVE */
- if nombre='' then do
- oldpath=zxamactsavepath()
- oldpattern=zxamactpattern()
- zxamsavepath("ram:")
- zxampattern('#?.TAP')
- ZXAMControlToFront()
- nombre=zxamsaverequester("Selecciona el fichero .TAP para SAVE...")
- ZXAMTapeSetSaveOffset(0)
- ZXAMEmulToFront()
- zxamsavepath(oldpath)
- zxampattern(oldpattern)
- end
- if nombre='' then exit 0 /* pulsado el CANCEL */
-
- if ~exists(nombre) then
- /* creamos el fichero */
- if ~open('fichero',nombre,'WRITE') then exit
- else nop
- else
- /* abrimos el fichero en modo APPEND */
- if ~open('fichero',nombre,'APPEND') then exit
- else nop
- endif
- /* Extraemos de la memoria de Spectrum el bloque a grabar */
- block=d2c(zxamtapeflag())
- if zxamtapesize()~=0 then block=insert(block,zxamgetmem(zxamtapeaddress(),zxamtapesize()))
- block=insert(block,d2c(zxamchecksumstring(block)))
- /* añadimos el tamaño del bloque */
- size=zxamtapesize()+2
- size=d2c(size)
- if length(size)=1 then size=insert(d2c(0),size)
- /* convertimos al formato invertido tipo Z80 */
- size=reverse(size)
- block=insert(size,block)
- /* salvamos el bloque */
- dummy=writech('fichero',block)
-
- ZXAMTapeSetSaveName(nombre)
-
- ZXAMTapeSetResult(1)
-
- dummy=close('fichero')
-
- exit
-
-